package Day_0201.JUC;

/**
 * @author zxc
 * @date 2023/02/01 15:14
 **/
public class Notify_notifyAll {
    public static void main(String[] args) {
        /**
         * notify和notifyAll之间的区别
         * 1.notify可能会导致死锁，而notifyAll则不会;
         *
         * 2.任何时候只有一个线程可以获得锁，也就是说只有一个线程可以运行synchronized 中的代码;
         * （1）使用notifyall,可以唤醒 所有处于wait状态的线程，使其重新进入锁的争夺队列中，
         * （2）而notify只能唤醒一个。
         *
         * 3.wait() 应配合while循环使用，不应使用if，务必在wait()调用前后都检查条件，
         * 如果不满足，必须调用notify()唤醒另外的线程来处理，自己继续wait()直至条件满足再往下执行。
         *
         * 4.notify() 是对notifyAll()的一个优化，但它有很精确的应用场景，并且要求正确使用。不然可能导致死锁。
         * 正确的场景应该是 WaitSet中等待的是相同的条件，唤醒任一个都能正确处理接下来的事项，
         * 如果唤醒的线程无法正确处理，务必确保继续notify()下一个线程，并且自身需要重新回到WaitSet中.
         */
    }
}
